package cn.good.yan.b12.t1;

import sun.rmi.runtime.Log;

import java.util.Date;

/**
 * b12 泛型
 *      案例1
 *      在实例化泛型类时，必须指定T的具体类型
 * @author shengren.yan
 * @create 2023-07-30
 */
public class T1<T> {
    // key这个成员变量的类型为T,T的类型由外部指定
    private T key;

    public T1(T key) { // 泛型构造方法形参key的类型也为T，T的类型由外部指定
        this.key = key;
    }

    public T getKey() { // 泛型方法getKey的返回值类型为T，T的类型由外部指定
        return key;
    }

    // 泛型方法，此时的 E 代表任何类型
    public <E> void show_E(E t){
        System.out.println(t.toString());
    }

    // 泛型方法与可变参数
    public <T> void printMsg( T... args){
        for(T t : args){
            System.out.println("泛型测试 t is " + t);
        }
    }

    // 静态方法的泛型
    public static <T> void show(T t){
        System.out.println("静态方法的泛型  " + t);
    }

    // 使用
    public static void main(String[] args) {
        T1<Integer> t = new T1<Integer>(123456);
        // 1 泛型方法： 参数可以是 字符串，也可以是时间对象
//        t.show_E("22");
//        t.show_E(new Date());
        // 2 可变参数测试  参数是多个
//        t.printMsg(new Date(),11,"abc");

    }

}
